iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
AI & Data

從資料庫到資料分析視覺化系列 第 21

{DAY 21} Pandas 學習筆記part.7

  • 分享至 

  • xImage
  •  

前言

這篇文章會進到資料的合併,
通常在處理資料的時候並不會只出現一筆
會需要同時處理很多比有關聯的資料
這時候會資料的合併就很重要!

也是會繼續利用kaggle上的開源資料進行更多的pandas練習

Kaggle: Your Machine Learning and Data Science Community

看的課程也是Coursera上的 Introduction to Data Science in Python

Coursera | Online Courses & Credentials From Top Educators. Join for Free | Coursera

練習是利用上述課程裡教的搭配以前在學校學過的知識

並且使用kaggle實際的資料檔整理出來的筆記

資料表的合併

合併資料表也是常用的資料分析處理手法,有垂直合併也有水平合併

在合併表格的時候會使用到SQL關連式資料庫的架構概念

outer join可以想成是文式圖的聯集

也就是想要的資料是兩者全部的資料

A和B全部

而inner join可以想成是文式圖的交集

只想要兩個資料裡重複出現的資料

現在來建立兩個Dataframe,練習資料的合併

import pandas as pd

# 首先建立一個關於商店等級的dataframe
level_df = pd.DataFrame([{"Name":"muroom","Level":"gold"},
                        {"Name":"niconico","Level":"silver"},
                        {"Name":"littlestar","Level":"copper"}])
# 將index設為商店名稱
level_df = level_df.set_index("Name")
#再建立一個關於商店販售的商品性質的dataframe
type_df = pd.DataFrame([{"Name":"muroom","Type":"accessories"},
                        {"Name":"thisthing","Type":"housewear"},
                        {"Name":"littlestar","Type":"clothes"}])
type_df = type_df.set_index("Name")

# 印出看看分別長怎樣
print(level_df.head())
print(type_df.head())

可以看到上面資料有重疊的部分,

muroom跟littlestar在兩筆資料內都有出現

而兩筆資料相關連的點就是欄位名稱都使用了"Name"

如果我現在想得到兩筆資料的聯集,也就是兩筆資料完全的合併

就會使用到outer join

pd.merge(level_df, type_df, how="outer", left_index=True, right_index=True)

可以看到因為level_df裡沒有thisthing這家店,

所以顯示NaN,

而Type裡的niconico出現NaN也是同樣的原因

現在若是想要得到兩筆資料裡共同出現的店家資料

可以使用inner join

只需要把how的attrbute改成inner

pd.merge(level_df, type_df, how="inner", left_index=True, right_index=True)

可以看到使用這個方法後合併的資料只會出現兩筆資料裡共同都有的店家

也就是muroom&littlestar

現在若是只想要在店家等級的dataframe裡加上店家販售的商品資訊

會使用到left join

把how的attrbute改成"left"

可以想成把要加入的新資料表放在右邊,原始的資料表放在左邊

left join就是把右邊的新資料表『往左邊放』的概念

這左右邊的概念可以應用在參數擺放的位置,第一個擺放的就是左邊不動的資料,第二個擺放的是右邊要加入的資料

pd.merge(level_df, type_df, how="left", left_index=True, right_index=True)

可以看到成功的將店家的等級資料表加上販售的商品性質

另外一種方法是right join
可以想成我們想在店家販售的商品性質表格內加上該店家的等級
想成把店家等級的資料表放在右邊,店家販售的商品性質表格資料表放在左邊

right join就是把左邊的新資料表『往右邊放』的概念

右邊的概念可以應用在參數擺放的位置,第一個擺放的就是想要加入的資料,第二個擺放的是不動的資料

pd.merge(level_df, type_df, how="right", left_index=True, right_index=True)

也有另外一種的合併方法,

使用“on"這個參數

on需要放的值是兩個資料表共同擁有的欄位名稱

類似SQLite的joinkey的概念

先將原本改過的index變回原始的default value,

使用 .reset_index()

level_df = level_df.reset_index()
type_df = type_df.reset_index()

print(level_df)
print(type_df)

現在index變回原始的default values

現在使用merge加上參數on將兩筆資料合併

pd.merge(level_df, type_df, how="right", on="Name")

以上說明的是資料的水平合併

在pandas裡也有資料的垂直合併

使用到的是.concat()這個語法

在這裡就不多加介紹

要使用的話也是可以去stakeoverflow上

根據想要使用的情境查詢相關語法

小結

今天練習的資料操作

很多跟SQL學到的概念重疊

像是inner join,outer join, left,right join這種

可以發現在資料科學的世界裡

很多概念是連貫在一起


上一篇
{DAY 20} Pandas 學習筆記part.6
下一篇
{DAY 22} Pandas 學習筆記part.8
系列文
從資料庫到資料分析視覺化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言